package com.grass;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * <p>类名称：ConsumeController
 * <p>描述说明：示例
 * <p>版本号：2.0.0.0
 *
 * @author Alpho@方大侠
 * @date 2019/3/26 19:12
 */
@RestController
@RequestMapping("/consumes")
public class ConsumeController {
//    /**
//     * 负载均衡器,通过LoadBalancerClient选取实例和拼接URL
//     */
//    @Resource
//    LoadBalancerClient loadBalancerClient;
//    /**
//     * 访问Rest服务的模版类，相当于Apache的HttpClient,但比后者更优雅
//     */
//    @Resource
//    RestTemplate restTemplate;

    /**
     * 通过定义的feign客户端来调用服务提供方的接口
     */
    @Resource
    ApiController apiController;

    @Resource
    ConsumeExampleServer consumeExampleServer;

    @Value("${spring.application.name}")
    private String application;

    @Value("${spring.cloud.config.profile}")
    private String profile;

    @GetMapping
    public String consume(){
//        /**
//         * ServiceInstance代表在服务发现系统中的一个实例.也就是说可以被ServiceInstanceChooser选择
//         */
//        ServiceInstance serviceInstance=loadBalancerClient.choose("core");
//        String url="http://"+serviceInstance.getHost()+":"+serviceInstance.getPort()+"/prints";
//        System.out.println(url);
//        return restTemplate.getForObject(url,String.class);

        //Ribbon通过拦截器，在实际服务调用的时候，会自动的去选取服务实例，并将要请求的IP和端口替换此处的服务名
//        return restTemplate.getForObject("http://core/prints",String.class);

        return apiController.sayHello();
    }

    @GetMapping("/config-server")
    public String getCofigServer(){
        return application.concat(":")+profile;
    }

    @GetMapping("/producers")
    public String getProducers(){
        return consumeExampleServer.getProducers();
    }
}
